
// 提取共性，封装重复的逻辑

type type = 'second' | 'minute' | 'hour' | 'day'

/**
 * 计算时间偏移量的工具函数，返回距离当前本地时间指定量的日期时间
 */
export default class TimeSpan {
    private static get now() {
        return Date.now()
    }
    private static toDateTime(timeStamp: number): Date {
        return new Date(timeStamp)
    }
    /**
     * 
     * @param type 偏移类型
     * @param offsetValue 偏移量 
     * @returns 
     */
    private static getOffsetDateTime(type: type, offsetValue: number): Date {
        switch (type) {
            case 'second':
                return this.toDateTime(this.now + offsetValue * 1000)
            case 'minute':
                return this.toDateTime(this.now + offsetValue * 60 * 1000)
            case 'hour':
                return this.toDateTime(this.now + offsetValue * 60 * 60 * 1000)
            case 'day':
                return this.toDateTime(this.now + offsetValue * 60 * 60 * 24 * 1000)
        }
    }

    /**
     * 
     * @param seconds 秒
     * @returns 
     */
    static fromSeconds(seconds: number): Date {
        return this.getOffsetDateTime('second', seconds)
    }
    /**
     * 
     * @param minutes 分
     * @returns 
     */
    static fromMinutes(minutes: number): Date {
        return this.getOffsetDateTime('minute', minutes)
    }
    /**
     * 
     * @param hours 小时
     * @returns 
     */
    static fromHours(hours: number): Date {
        return this.getOffsetDateTime('hour', hours)
    }
    /**
     * 
     * @param days 天
     * @returns 
     */
    static fromDays(days: number): Date {
        return this.getOffsetDateTime('day', days)
    }
}

TimeSpan.fromSeconds(2)
TimeSpan.fromMinutes(2)
TimeSpan.fromHours(2)
TimeSpan.fromDays(2)

// 存在问题：switch-case是往往是坏代码的明确标志，它不利于扩展，不符合开闭原则